
package studystat;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Een achievement is een trofee die wordt gegeven aan een gebruiker als deze bepaalde condities heeft behaald.
 */
public class Achievement {
	
	/**
	 * Velden
	 */
	// Naam van de achievement
	private String naam;
	
	private String titel;
	
	// Lijst met alle condities waaraan 
	// de gebruiker moet voldoen om de achievement te verdienen
	private List<Conditie> condities;

	/**
	 * Maak een nieuwe achievement aan
	 */
	public Achievement(String naam) {
		this.naam = naam;
		condities = new ArrayList<Conditie>();
	}
	
	
	
	/**
	 * Get-methodes
	 */
	
	/**
	 * @return De naam van de achievement
	 */
	public String getNaam() {
		return naam;
	}
	
	public String getTitel(){
		return titel;
	}
	
	/**
	 * @return Een lijst met condities waaraan voldaan moet zijn om de achievement te verdienen
	 */
	public List<Conditie> getCondities() {
		return condities;
	}
	
	public void setTitel(String titel){
		this.titel = titel;
	}
	
	
	/**
	 * Set-methodes
	 */
	
	 /**
	  * Verander de naam van de achievement
	  * @param naam	De nieuwe naam van de achievement
	  */
	public void setNaam(String naam) {
		this.naam = naam;
	}
	
	/**
	 * Verander de lijst met condities
	 * @param condities	De nieuwe lijst met condities
	 */
	public void setCondities(List<Conditie> condities) {
		this.condities = condities;
	}
	
	/**
	 * Add-methodes
	 */
	
	/**
	 * Voeg een condities toe aan de lijst met condities
	 * @param condities	De condities die wordt toegevoegd
	 */
	public void addCondities(Conditie conditie) {
		condities.add(conditie);
	}
	
	/**
	 * Voeg een lijst met condities toe aan de lijst met condities
	 * @param condities	De lijst met condities die wordt toegevoegd
	 */
	public void addCondities(List<Conditie> condities) {
		this.condities.addAll(condities);
	}
	
	/**
	 * Eigen methodes
	 */
	
	/**
	 * Kijkt na of, afgaande op de lijst met activiteiten, voldaan is aan
	 * alle condities
	 * @param activiteiten	De lijst met activiteiten
	 * @return True als, afgaande op activiteiten, aan alle condities is voldaan, anders false
	 */
	public boolean isVoldaan(List<Activiteit> activiteiten) {
		boolean voldaan = true;
		Iterator<Conditie> it = condities.iterator();
		while(it.hasNext() && voldaan) {
			Conditie conditie = it.next();
			if(!conditie.isVoldaan(activiteiten)) {
				voldaan = false;
			}
		}
		return voldaan;
	}
	

}
